/**
因为goroutine和channel在go语言中相对重要且核心，增加一节巩固并深入理解轻量级线程（goroutine）和通道（channel）相关知识。
用学到的知识实现下面的题目：
实现一个支持并发打印的功能，分别创建1~3个打印任务分发程序的goroutine，同时调用打印机服务（printer），并实现类似于信号量的功能，通过“信号”让使用者和服务方能知道互相的状态，如打印完成后要通知使用方“打印完毕”，使用方无数据继续打印时，通知服务方“没有数据了”。最终，要能实现程序的自动正常退出。
保证代码结构严谨，无报错，不崩溃。
 */

package main

import (
	"fmt"
	"math/rand"
)


func input(list chan int, sign chan int) {
Label:
	select {
	case list <- rand.Int():
	case <-sign:
		break Label
	}

	close(list)
}

func main() {
	sign := make(chan int)
	list := make(chan int)

	//for i := 0; i < 3; i++ {
		go input(list, sign)
	//}

	//sign <- 0

	printer(list, sign)


}




func printer(list chan int, sign chan int) {
	//close(sign)

	for p := range list {
		fmt.Printf("当前打印: %d\n", p)
	}
	//sign <- 1

	//defer wg.Done()
	//for s := range sign {
	//	if s == 0 {
	//
	//	}
	//}
}